package com.study.spark.scala.chapter02

object Scala04_String {

  def main(args: Array[String]): Unit = {
    // TODO Stirng的拼接
    val name = "zhangsan"
    //println("hello"+name)//hellozhangsan

    // JSON => JavaScript Object Notation
    /*
    一种用于网络浏览器的弱类型语言（不关心对象的类型），遵循函数式编程
     JSON字符串 => 符合JSON格式的字符串
     */

    // 网络中传递的数据是什么？
    /*
    数据的类型：网络中不能传递数字，只能传递字符串

    数据的格式：JSON对象
    不能是内存中的对象 =>序列化 =>反序列化  在大数据背景下成本高，消耗资源大
    所有就使用JSON字符串：简捷，无序列化

    JSON-lib:几乎所有的大数据框架都依赖了这个jar包，都要解析JSON格式的数据
     */
    val passward ="123456"

    val json ="{\"username\":\"name\",\"passward\":\"123456\"}"
    //println(json)//{"username":"name","passward":"123456"}

    // JSON字符串拼接:"+name+"和"+passward+"
    val json1 ="{\"username\":\""+name+"\",\"passward\":\""+passward+"\"}"
    //println(json1)//{"username":"zhangsan","passward":"123456"}

    // 传值字符串
    /*
    没有自动换行，不是很方便，不常用
    printf("username : %s",name)//username : zhangsan
    printf("passward : %s",passward)//username : zhangsanpassward : 123456
     */

    // 插值字符串:注意不建议标识符用$开头
    //println(s"username : $name")//username : zhangsan

    // 官方的bug无法插值字符串封装JSON   ${}:可扩展推荐使用
    //val json2 =s"{\"username\":\"${name}\",\"passward\":\"${passward}\"}"
    //println(json2)//Error:(44, 30) ';' expected but string literal found.

    // 多行字符串 作用：封装JSON和SQL文
    // | 表示顶格符 符号可以更改
    val s =
      """
        |hello
        |scala
        |my name is ljh
      """.stripMargin('#')
    //println(s)
    /*
        |hello
        |scala
        |my name is ljh
     */

    // 1.封装JSON
    val json2 =
      s"""
        |{"username":"$name","passward":"$passward"}
      """.stripMargin
    //println(json2)//{"username":"zhangsan","passward":"123456"}

    // 2.封装SQL文
    val sql =
      """
        |select a.prod_name,a.prod_price
        |from
        |   (
        |    select prod_name, prod_price
        |      from producers
        |      where vend_id = 'DLL01'
        |         or vend_id = 'BRS01'
        |   ) a
        |where a.prod_price>=10;
        |
      """.stripMargin
    println(sql)
    /*
select a.prod_name,a.prod_price
from
   (
    select prod_name, prod_price
      from producers
      where vend_id = 'DLL01'
         or vend_id = 'BRS01'
   ) a
where a.prod_price>=10;
     */

  }

}
